package yx.utils;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * Excel 解析类
 * 
 * @author longyingan
 * 
 */
public class ExcelUtils {

	/**
	 * 解析 模板内容
	 * 
	 * @return
	 * @throws IOException
	 */
	public static Map<Integer, Boolean> resolveExcelTemplate(String templatePath) throws IOException {
		InputStream inp = new FileInputStream(templatePath);
		XSSFWorkbook wb = new XSSFWorkbook(inp);
		XSSFSheet sheet = wb.getSheetAt(0); // 只 读取 第一个 sheet
		XSSFRow row = sheet.getRow(0); // 只读取 第一行数据
		int cellnum = row.getLastCellNum();
		// K cell值索引 V是否可以为空(true 可以为空 false不能为空)
		// TODO: 导入数据的许多属性没有校验，例如：长度
		Map<Integer, Boolean> mapCell = new HashMap<Integer, Boolean>();
		for (int cellindex = 0; cellindex < cellnum; cellindex++) {
			XSSFCell cell = row.getCell(cellindex);
			if (cell != null) {
				String str = cell.toString();
				int index = str.indexOf('*'); // 不能为空标示
				mapCell.put(cellindex, index != -1);
			}
		}
		return mapCell;
	}

	/**
	 * 获取 XSSFCell 的值
	 * 
	 * @param cell
	 * @return
	 */
	public static String getExcelCellValue(XSSFCell cell) {
		if (cell != null) {
			DecimalFormat df = new DecimalFormat("#");
			int cellType = cell.getCellType();
			String cellStr = null;
			switch (cellType) {
			case 0:// Numeric
				cellStr = df.format(cell.getNumericCellValue());
				break;
			case 1:// String
				cellStr = cell.getStringCellValue();
				break;
			default:
				cellStr = cell.toString();
			}
			return cellStr;
		} else {
			return null;
		}
	}
}
